package com.stefanini.resultmundial2014.controladores;

import com.stefanini.mundial2014capadatos.Grupo;
import com.stefanini.resultmundial2014.ejb.GrupoManager;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Named;

/** @author CAMALEON **/

@Named(value = "gruposAdminController")
@SessionScoped
public class GruposAdminController implements Serializable{
  private static final long serialVersionUID = 1L;
    
    /*Variable objeto*/
   private Grupo grupo;
   
   /*Variables*/
   private List<Grupo> grupos;
   private boolean realizarConsulta = true;
   private boolean isEdit = false;

   @EJB
   private GrupoManager grupoManager;
   
   /******************************************************************************/
   /*******Implementacion de metodos*******/
   
   /*Metodo que crea el objeto Grupo*/
    public void iniCreate(){
        setGrupo(new Grupo());
        isEdit = false;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/ResultMundial2014/pages/grupos/gruposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error de redireccionamiento - GruposAdminController", ex);
        }
    }
    
    /*Metodo que inicializa la instancia del objeto tipo Grupo*/
    public void initEdit(Grupo grupoEdit){
        this.setGrupo(grupoEdit);
        isEdit = true;
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("/ResultMundial2014/pages/grupos/gruposEdit.xhtml");
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, "Error de redireccionamiento - GruposAdminController", ex);
        }
    }
    
    /*Metodo que consulta los grupos*/
    public void consultaGrupo(){
        if(realizarConsulta){
            setGrupos(grupoManager.getAllGrupos());
            realizarConsulta = false;
        }
    }
    
    /*Metodo que envía al manager el grupo a guardar*/
    public void guardarGrupos(){
        FacesContext ctx = FacesContext.getCurrentInstance();
        if (grupoManager.verificaGrupoExistente(grupo.getNombre())) {
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Error", "Ya existe un grupo con el nombre ingresado"));
        }else{
            if (grupoManager.guardarGrupo(grupo, isEdit)){
                ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, 
                    "Info", "Grupo creado exitosamente"));
                
                /* Cambiamos el valor de la variable para que se actualice el listado de los grupos
                 * La siguiente ves que se actualice la página
                 */
                realizarConsulta = true;
                /*Se redireciona la pagina para que se efectue la actualización de los grupos creados*/
                try {
                    ctx.getExternalContext().redirect("/ResultMundial2014/pages/grupos/gruposAdmin.xhtml");
                } catch (IOException ex) {
                    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE,
                            "Error en el redireccionamiento - GruposAdminController" , ex);
                }
            }else{
              ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "Error al crear el grupo - GruposAdminControoller"));
            }
        }
    }
   
    /*Metodo que llama al metodo que elimina el item*/
    public void eliminarGrupo (Grupo grupo){
        FacesContext ctx = FacesContext.getCurrentInstance();
        if (grupoManager.eliminaGrupo(grupo)){
            ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Info",
                    "Grupo Eliminado Exitosamente"));
            realizarConsulta = true;
            consultaGrupo();
        } else {
            ctx.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Error", "Error al eliminar el grupo"));
        }
    }
    
   /******************************************************************************/ 
    /******* METODOS ACCESORES*******/

    /*Grupo*/
    public Grupo getGrupo() {
        return grupo;
    }

    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }
    
    /*Lista grupos*/
    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }
}
